Administration Guides
Import packages​
Configurer le tenant cible​
Vos packages seront envoyé sur le registre de paquet dans le tenant que vous configurez.
Le tenant public installé par défaut est Athea.
Aucune valeur par défaut n'est prévu pour cette configuration afin d'éviter d'exposer des paquets privé dans le tenant publique.
config:
registry:
tenant: "athea"
[...]
[...]
Configurer un bucket source​
Lorsque vous installez le Package Importer, vous pouvez fournir une liste de bucket Ă surveiller ainsi que le type de package qui seront attendus dedans (python, maven, ...) :
config:
[...]
sources:
- kind: python
bucket: "pkg-python"
- kind: generic
bucket: "pkg-gen"
[...]
Importer un package​
- via l'UI de Minio
Connectez-vous au S3 auquel l'importer est lié et téléchargez votre package dans le bon bucket (référez vous à la configuration du package importer, eg: dans notre exemple, un package python dans le bucket pkg-python)
le Package Importer téléchargera le package et essayera d'importer son contenu dans le dépôt de packages.
Une fois la tentative terminée, les informations sur le résultat seront ajoutés sous forme de tag s3 sur l'objet dans S3 :
-
kosmos-pkg-import-status: Indique si le job a réussi (success) ou échoué (failure). -
kosmos-pkg-import-ts: La date à laquelle la tentative s'est terminé au format RFC3339. -
via un pod
mc(ex: avec l'archive offline-package-pip-3-0-0.tar.gz ):
# ex: import python
archive=offline-package-pip-3-0-0.tar.gz # offline-package-NNN-X.Y.Z.tar.gz
bucket=pkg-python # pkg-python, pkg-mvn, pkg-npm, pkg-generic, pkg-r, pkg-go
s3_username=$(kubectl -n kosmos-s3 get secrets minio-secrets -o jsonpath={.data.accessKey} | base64 -d)
s3_password=$(kubectl -n kosmos-s3 get secrets minio-secrets -o jsonpath={.data.secretKey} | base64 -d)
mkdir -p /data/generated
cat <<-EOF >"/data/generated/import-s3.sh"
#!/bin/bash
mc alias --insecure set kosmos-s3 https://s3-api-admin.technique.artemis $s3_username $s3_password
mc cp --insecure /data/${archive} kosmos-s3/${bucket}/
EOF
chmod a+x /data/generated/import-s3.sh
podman run -v /data:/data --entrypoint /data/generated/import-s3.sh kosmos-registry.technique.artemis/athea/minio/mc:RELEASE.2025-08-13T08-35-41Z
rm -f /data/generated/import-s3.sh
Utilisation avancée​
Suivre l'avancement de l'import​
Vous pouvez consulter les journaux de l'application pour savoir ce que l'importeur de paquets est en train de faire ou quelle erreur il a rencontrée :
kubectl logs -n kosmos-dev-restricted -l app.kubernetes.io/instance=import-packages -f
Ignorer l'upload sur S3​
Il est possible d'ignorer l'upload vers S3 en copiant directement votre paquet dans un des pods du Package Importer et en utilisant manuellement le script qui téléverse vers le gestionnaire de dépôts.
Une fois dans le pod, vous aurez accès à plusieurs scripts :
- package-import-offline-generic.sh : Utilisé pour téléverser des archives génériques
- package-import-offline-mvn.sh : Utilisé pour téléverser des paquets Java
- package-import-offline-npm.sh : Utilisé pour téléverser des paquets NPM
- package-import-offline-pip.sh : Utilisé pour téléverser des paquets Python
Voici un exemple avec un paquet Python nommé offline-package-pip.tar.gz :
# Get Gitea credentials
GITEA_ADMIN_USER=$(kubectl -n kosmos-dev-restricted get secret gitea-admin-secret -o jsonpath="{.data.username}" | base64 -d; echo)
GITEA_ADMIN_PASSWORD=$(kubectl -n kosmos-dev-restricted get secret gitea-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo)
# Copy python libraries to import pod
kubectl cp offline-package-pip.tar.gz -n kosmos-dev-restricted $(kubectl get pods -n kosmos-dev-restricted -l app.kubernetes.io/instance=import-packages -o jsonpath='{.items[0].metadata.name}'):/data
# Upload python libraries into Gitea
kubectl exec -n kosmos-dev-restricted -it $(kubectl get pods -n kosmos-dev-restricted -l app.kubernetes.io/instance=import-packages -o jsonpath='{.items[0].metadata.name}') -- bash -c "./package-import-offline-pip.sh -r gitea-http.kosmos-dev-restricted.svc.cluster.local:3000 -t athea -u $GITEA_ADMIN_USER -p $GITEA_ADMIN_PASSWORD /data/offline-package-pip.tar.gz"
# Clean the PVC afterward
kubectl exec -n kosmos-dev-restricted -it $(kubectl get pods -n kosmos-dev-restricted -l app.kubernetes.io/instance=import-packages -o jsonpath='{.items[0].metadata.name}') -- bash -c "rm /data/offline-package-pip.tar.gz"
kubectl exec -n kosmos-dev-restricted -it $(kubectl get pods -n kosmos-dev-restricted -l app.kubernetes.io/instance=import-packages -o jsonpath='{.items[0].metadata.name}') -- bash -c "rm -rf /data/offline-package-pip/"
Les scripts proposent une option --help si vous avez besoin de plus d'informations.
Supprimer automatiquement les archives d'imports​
Vous pouvez utiliser le Lifecycle Management de S3 afin de supprimer les packages après un certain temps nombre de jours afin d'éviter de remplir inutilement le S3.
Pour cela :
- Connectez-vous à la console S3 avec assez de privilèges pour voir la section
Administrator - Cliquez sur l'onglet
Buckets - Cliquez sur votre bucket (eg:
pkg-python) - Cliquez sur l'onglet
Lifecycle - Cliquez sur el bouton
Add Lifecycle Rule +:- Dans le champ
Aftermettez le maximum de jours qu'un fichier peut rester avant d'être supprimé. N'importe quel fichier, s'il valide les règles de filtrage (sans règle, tous les fichiers sont concernés) sera supprimé une fois plus vieux que cette valeur. - La section
Filterspermet de restreindre les objets auxquels la règle de suppression s'applique. Si vous souhaitez par exemple ne supprimer que les imports réussis :- Cliquez sur la liste déroulante
Filters:- Dans la section
Tags, ajoutez une ligne :Tag Keydoit prendre la valeurkosmos-pkg-import-statusTag Valuedoit prendre la valeursuccess
- Dans la section
- Avec cette configuration, n'importe quel fichier plus vieux que
Xjours (Xétant votre nombre de jours configuré) ET qui a le tagkosmos-pkg-import-statusavec comme valeursuccesssera supprimé.
- Cliquez sur la liste déroulante
- Dans le champ
- Minio calcule l'age par rapport à la date de téléchargement sur le cluster et non pas de l'ajout du TAG !
- Minio ne supporte que les nombres entiers et uniquement le nombre de jours comme unité, il n'est donc pas possible de descendre en dessous d'une journée.